Este relatório apresenta uma análise exploratória, detecção de outliers, estatística descritiva e mapas dos dados de Bolsas e Auxílios Pagos pelo CNPq. O foco da análise está nas principais linhas de fomento, áreas de conhecimento e na distribuição geográfica por Unidade da Federação (UF) de origem. Exploraremos também a evolução temporal dos investimentos e uma análise mais granular para a região do Amazonas.
Os dados foram extraídos da plataforma Google BigQuery utilizando o
pacote basedosdados. O código a seguir realiza a
autenticação e o download. Para otimizar a execução, o download só é
realizado se os arquivos de dados ainda não existirem localmente no
diretório dados/.
# Este chunk deve ser executado manualmente uma vez para baixar os dados.
# A opção eval=FALSE impede que ele rode toda vez que o relatório for gerado.
# 1. Autenticação (pode pedir para logar no navegador)
bq_auth()
# 2. Defina seu ID de projeto do Google Cloud para cobrança
basedosdados::set_billing_id("projetofinalgr03")
# 3. Cria o diretório para os dados
if (!dir.exists("dados")) dir.create("dados")
# 4. Query para buscar os dados
query <- "
WITH
dicionario_linha_fomento AS (
SELECT
chave AS chave_linha_fomento,
valor AS descricao_linha_fomento
FROM `basedosdados.br_cnpq_bolsas.dicionario`
WHERE nome_coluna = 'linha_fomento'
AND id_tabela = 'microdados'
)
SELECT
dados.ano AS ano,
dados.processo AS processo,
dados.data_inicio_processo,
dados.data_fim_processo,
dados.titulo_projeto,
d.descricao_linha_fomento AS linha_fomento,
dados.area_conhecimento,
dados.sigla_uf_origem,
dados.instituicao_origem,
dados.sigla_uf_destino,
dados.sigla_instituicao_destino,
dados.valor
FROM `basedosdados.br_cnpq_bolsas.microdados` AS dados
LEFT JOIN dicionario_linha_fomento d ON dados.linha_fomento = d.chave_linha_fomento
"
# 5. Executa a query e salva os resultados
dados_cnpq <- basedosdados::read_sql(query,
billing_project_id = basedosdados::get_billing_id()) %>%
write_csv("dados/cnpq.csv")
# 6. Salva os dados geoespaciais dos estados
estados <- geobr::read_state(year = 2020)
saveRDS(estados, "dados/estados.rds")Após o download, os dados são carregados e pré-processados. O
tratamento consiste em substituir valores ausentes (NA) nas
colunas categóricas por “Não informado” e remover registros que não
possuem valor financeiro. Além disso, adicionamos uma coluna para o
código do município de origem, essencial para análises geográficas mais
detalhadas. É crucial que o mapeamento das instituições para os códigos
de município seja preciso para o funcionamento do mapa.
# CARREGAMENTO DOS DADOS - ESSAS LINHAS FORAM INSERIDAS/CORRIGIDAS AQUI
dados <- read_csv("dados/cnpq.csv")
estados <- readRDS("dados/estados.rds")
dados <- dados %>%
mutate(
# Exemplo: Mapeia instituições a códigos de município. MUITO SIMPLIFICADO!
# Na vida real, você precisaria de um dicionário ou geocodificação.
code_municipio_origem = case_when(
grepl("UNIVERSIDADE FEDERAL DO AMAZONAS", instituicao_origem, ignore.case = TRUE) ~ 1302603, # Manaus
grepl("INSTITUTO FEDERAL DE EDUCACAO CIENCIA E TECNOLOGIA DO AMAZONAS - CAMPUS ITACOATIARA", instituicao_origem, ignore.case = TRUE) ~ 1301902, # Itacoatiara
grepl("UNIVERSIDADE DO ESTADO DO AMAZONAS - CAMPUS PARINTINS", instituicao_origem, ignore.case = TRUE) ~ 1303403, # Parintins
TRUE ~ NA_real_ # Deixa NA para outros
)
) %>%
mutate(
linha_fomento = replace_na(linha_fomento, "Não informado"),
area_conhecimento = replace_na(area_conhecimento, "Não informado")
) %>%
filter(!is.na(valor))
# Verificação do percentual de NAs por coluna após o tratamento
# round(colSums(is.na(dados)) / nrow(dados) * 100, 2)O conjunto de dados, após o tratamento, possui as seguintes dimensões e características:
## Total de registros: 2.838.785
## Total de colunas: 13
| Name | dados |
| Number of rows | 2838785 |
| Number of columns | 13 |
| _______________________ | |
| Column type frequency: | |
| character | 8 |
| Date | 2 |
| numeric | 3 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| processo | 0 | 1.00 | 13 | 13 | 0 | 1342021 | 0 |
| titulo_projeto | 2451295 | 0.14 | 1 | 241 | 0 | 126945 | 0 |
| linha_fomento | 0 | 1.00 | 7 | 50 | 0 | 21 | 0 |
| area_conhecimento | 0 | 1.00 | 5 | 48 | 0 | 135 | 0 |
| sigla_uf_origem | 258749 | 0.91 | 2 | 2 | 0 | 27 | 0 |
| instituicao_origem | 228537 | 0.92 | 3 | 75 | 0 | 9391 | 0 |
| sigla_uf_destino | 99092 | 0.97 | 2 | 8 | 0 | 28 | 0 |
| sigla_instituicao_destino | 12357 | 1.00 | 1 | 16 | 0 | 7008 | 0 |
Variable type: Date
| skim_variable | n_missing | complete_rate | min | max | median | n_unique |
|---|---|---|---|---|---|---|
| data_inicio_processo | 2611528 | 0.08 | 2012-06-01 | 2024-03-01 | 2022-03-16 | 463 |
| data_fim_processo | 2611528 | 0.08 | 2016-08-31 | 2027-06-30 | 2023-08-31 | 199 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| ano | 0 | 1 | 2014.57 | 5.03 | 2002.00 | 2011 | 2015 | 2019 | 2022 | ▂▅▇▇▇ |
| valor | 0 | 1 | 10074.62 | 39496.29 | -241.51 | 1600 | 2800 | 12100 | 13588321 | ▇▁▁▁▁ |
| code_municipio_origem | 2825315 | 0 | 1302603.00 | 0.00 | 1302603.00 | 1302603 | 1302603 | 1302603 | 1302603 | ▁▁▇▁▁ |
Abaixo, um resumo estatístico da variável valor.
As estatísticas também foram calculadas para cada linha de fomento:
dados %>%
group_by(linha_fomento) %>%
summarise(
n = n(),
Média = mean(valor, na.rm = TRUE),
Mediana = median(valor, na.rm = TRUE),
'Desvio Padrão' = sd(valor, na.rm = TRUE)
) %>%
arrange(desc(n)) %>%
kable(
caption = "Estatísticas do Valor das Bolsas por Linha de Fomento.",
digits = 2
)| linha_fomento | n | Média | Mediana | Desvio Padrão |
|---|---|---|---|---|
| Não informado | 2377350 | 10818.13 | 2800.00 | 36200.17 |
| Bolsas de Iniciação Científica | 178340 | 1518.82 | 1200.00 | 1100.81 |
| Bolsas de Iniciação Científica Júnior | 81883 | 361.52 | 200.00 | 310.12 |
| Bolsas de Produtividade em Pesquisa e Tecnologia | 60040 | 10313.26 | 11000.00 | 9582.59 |
| Bolsas de Doutorado | 51908 | 9224.29 | 4334.00 | 11791.24 |
| Bolsas de Mestrado | 29471 | 6211.07 | 3000.00 | 5875.67 |
| Bolsas de Iniciação Tecnológica e Industrial | 18125 | 2060.14 | 1600.00 | 998.95 |
| Bolsas de Desenvolvimento Tecnológico e Industrial | 15166 | 11700.24 | 8320.00 | 10349.63 |
| Apoio a Projetos de Pesquisas | 7865 | 99988.49 | 32020.00 | 391051.32 |
| Bolsas de Extensão em Pesquisa | 5105 | 20040.94 | 12000.00 | 18141.75 |
| Bolsas de Apoio Técnico | 4923 | 2194.77 | 1650.00 | 1591.46 |
| Bolsas de Pós-doutorado | 4188 | 24588.56 | 18000.00 | 24022.55 |
| Bolsas de Fixação de Doutores | 2574 | 14121.50 | 10500.00 | 11613.60 |
| Bolsas de Pesquisador/Especialista Visitante | 651 | 16923.59 | 12500.00 | 13555.19 |
| Bolsas de Desenvolvimento Científico e Regional | 538 | 27940.43 | 29400.00 | 21147.23 |
| Apoio a Participação/Realização de Eventos | 343 | 42723.63 | 40000.00 | 23639.66 |
| Apoio a Periódicos Científicos | 152 | 18113.82 | 15125.00 | 9181.45 |
| Indefinido | 93 | 3797.20 | 4000.00 | 3453.54 |
| Estágio | 37 | 40705.25 | 38274.99 | 26459.03 |
| Bolsas de Graduação | 24 | 26347.42 | 16104.74 | 32786.12 |
| Bolsas no Exterior | 9 | 10371.82 | 8307.93 | 4095.41 |
Valores atípicos (outliers) na variável valor foram
identificados usando o critério do Intervalo Interquartil (IQR). A
tabela interativa a seguir mostra os registros classificados como
outliers.
q1 <- quantile(dados$valor, 0.25, na.rm = TRUE)
q3 <- quantile(dados$valor, 0.75, na.rm = TRUE)
iqr <- q3 - q1
lim_inf <- q1 - 1.5 * iqr
lim_sup <- q3 + 1.5 * iqr
dados <- dados %>%
mutate(outlier = case_when(
valor < lim_inf ~ "Inferior",
valor > lim_sup ~ "Superior",
TRUE ~ "Normal"
))
datatable(
dados %>% filter(outlier != "Normal") %>%
select(ano, sigla_uf_origem, titulo_projeto, valor, outlier),
options = list(pageLength = 10),
caption = "Tabela: Outliers Inferiores e Superiores nos Valores das Bolsas."
)